package fr.esisar.cs420.graphproj;

public class Photo {
	// Type de Document (Propre à la classe)
	public static enum type { Photo, Album, Livre , Format };
	
	// Localisation du Document (Propre à la classe)
	public static enum localisation { Locale, Distante, Exemple };
	
	// Titre, Commentaire, et Nom de l'image
	private StringBuilder title = new StringBuilder("Simple Photo"),
			com = new StringBuilder("Commentaire: Ceci est la photo par défaut."),
			name = new StringBuilder("cross.png"),
			localDir = new StringBuilder("Unknown\\");
	
	// Type et Localisation
	private type t = type.Photo;
	private localisation l = localisation.Exemple;
	
	// Pointeurs de double liste chainée
	private Photo prec = null, next = null;
	
	// Numéro de photo d'un document
	private int num = 0;
	private int id = 0;
	
	// Constructeurs
	public Photo(){}
	public Photo(Photo p1){
		if(p1!=null){
			prec = p1; 
			num+=p1.getNumber();
			prec.next = this;
		}
		else num = 1;
	}
	// Constructeur configurable
	public Photo(int id, type ty, localisation lo, Photo prec, String pName, String title, String com){
		this(prec);
		this.id = id;
		t = ty;
		l = lo;
		setPhotoName(pName);
		setTitle(title);
		setCom(com);
	}
	// Constructeur Local
	public Photo(String dir, String name){
		this(null);
		t = type.Photo;
		l = localisation.Locale;
		setPhotoName(name);
		setLocalDir(dir);
	}
	// Constructeur Distant
	public Photo(int id, String BDDname, Photo prec){
		this(prec);
		this.id = id;
		l = localisation.Distante;
		setPhotoName(BDDname);
	}

	// Checkers
	public boolean isAlbum() { return t == type.Album; }
	public boolean isBook()  { return t == type.Livre; }
	public boolean isPhoto() { return t == type.Photo; }
	
	// Getters
	public int getId()					{ return id;				}
	public String getTitle()			{ return title.toString();	}
	public String getCom()				{ return com.toString();	}
	public String getPhotoName()		{ return name.toString();	}
	public Photo getNextPhoto()			{ return next;				}
	public Photo getPrecPhoto()			{ return prec;				}
	public int getNumber()				{ return num;				}
	public String getDir(){
		switch(l){
			case Distante:
				return "C:\\PICSBDD\\";
			case Locale:
				return localDir+"\\";
			default:
				return "img/ex/";
		}
	}
	public String getFileDir(){
		switch(l){
			case Distante:
				return "C:\\PICSBDD\\"+name;
			case Locale:
				return localDir+"\\"+name;
			default:
				return "img/ex/"+name;
		}
	}
	public static Photo getFirst(Photo doc){
		if(doc!=null){
			while(doc.prec!=null) doc = doc.prec;
		}
		return doc;
	}
	
	public static Photo goTo(int id, Photo doc){
		doc = Photo.getFirst(doc);
		if(doc!=null){
			while(doc.getId()!=id&&doc.getNextPhoto()!=null) doc = doc.getNextPhoto();
		}
		return doc;
	}
	
	// Setters
	public void setTitle(String str)	{ title.replace(0, title.length(), str);		}
	public void setCom(String str)		{ com.replace(0, com.length(), str);			}
	public void setLocalDir(String str) { localDir.replace(0, localDir.length(), str);	}
	public void setPhotoName(String str){ name.replace(0, name.length(), str);			}
	public void setPrec(Photo p)		{ prec = p;										}
	public void setNext(Photo p)		{ next = p;										}
}
